import {
	urls
} from '@/utils/config'

const http = uni.$u.http
// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
	// 初始化请求配置
	http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = urls.baseURL; /* 根域名 */
		return config
	})

	// 请求拦截
	http.interceptors.request.use((config) => { // 可使用async await 做异步操作
			uni.showLoading({
				mask:true,
				title:'加载中'
			})
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		const token = vm.$store.state.auth.token || uni.getStorageSync('token') || ''
		if (token) {
			config.header.Authorization = `Bearer ${token}`
		}
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		if(response.data.code===200){
			uni.hideLoading()
			const data = response.data
			return data === undefined ? {} : data
		}else if(response.data.code===40002||response.data.code===40001){
			uni.hideLoading()
			uni.showToast({
				title: response.data.msg,
				icon: 'none',
				duration: 2000,
			})
			vm.$store.dispatch('auth/LOGOUT')
		}else{
			uni.hideLoading()
			uni.showToast({
				title: response.data.message,
				icon: 'none',
				duration: 2000,
			})
		}
	}, (response) => {
		uni.hideLoading()
		// 对响应错误做点什么 （statusCode !== 200）
		uni.showToast({
			title: response.data?.error,
			icon: 'none',
			duration: 2000,
		})
		return Promise.reject(response)
	})
}